home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Python 1.4 / Python 1.4 source / Mac / Tools / twit / mactwit_stack.py < prev    next >
Encoding:
Text File  |  1996-10-09  |  4.1 KB  |  160 lines  |  [TEXT/Pyth]

  1. # A stab at a python debugger
  2. import Res
  3. import Qd
  4. import Dlg
  5. import Win
  6. import FrameWork
  7. import EasyDialogs
  8. import sys
  9. import TwitCore
  10. from mac_widgets import MT_AnyList, MT_IndexList, MT_IconTextWidget
  11.  
  12. # Our dialogs
  13. ID_STACK=513
  14. I_STACK_TITLE=1
  15. I_STACK=2
  16. I_VARS_TITLE=3
  17. I_VARS=4
  18. I_SOURCE_TITLE=5
  19. I_SOURCE=6
  20. I_EXC_TITLE=7
  21. I_EXC=8
  22. I_EXCVALUE_TITLE=9
  23. I_EXCVALUE=10
  24. I_BROWSE=11
  25. I_RULER1=12
  26. I_RULER2=13
  27. I_STATE_TITLE=14
  28. I_STATE=15
  29. I_SHOW_COMPLEX=16
  30. I_SHOW_SYSTEM=17
  31. I_EDIT=18
  32.  
  33. class StackBrowser(FrameWork.DialogWindow, TwitCore.StackBrowser):
  34.     """The stack-browser dialog - mac-dependent part"""
  35.     def open(self):
  36.         FrameWork.DialogWindow.open(self, ID_STACK)
  37.         self.SetPort()
  38.         Qd.TextFont(3)
  39.         Qd.TextSize(9)
  40.  
  41.         tp, h, rect = self.wid.GetDialogItem(I_STACK)
  42.         self.stack = MT_IndexList(self.wid, rect, 2)
  43.         tp, h, rect = self.wid.GetDialogItem(I_VARS)
  44.         self.vars = MT_AnyList(self.wid, rect, 2)
  45.         tp, h, rect = self.wid.GetDialogItem(I_SOURCE)
  46.         self.source = MT_IconTextWidget(self.wid, rect)
  47.  
  48.         self.mi_open()
  49.         
  50.     def setsource(self, msg):
  51.         tp, h, rect = self.wid.GetDialogItem(I_SOURCE_TITLE)
  52.         if self.cur_source:
  53.             Dlg.SetDialogItemText(h, self.cur_source)
  54.         else:
  55.             Dlg.SetDialogItemText(h, msg)
  56.         self.source.setcontent(self.cur_source)
  57.         
  58.     def source_setbreaks(self, list):
  59.         self.source.setbreaks(list)
  60.         
  61.     def source_setline(self, lineno, icon):
  62.         self.source.setcurline(lineno, icon)
  63.         
  64.     def source_select(self, lineno):
  65.         self.source.select(lineno)
  66.  
  67.     def stack_setcontent(self, names, locations):
  68.         self.stack.setcontent(names, locations)
  69.  
  70.     def stack_select(self, number):
  71.         self.stack.select(number)
  72.         
  73.     def setvars(self):
  74.         self.vars.setcontent(self.cont_varnames, self.cont_varvalues)
  75.         
  76.     def setexception(self, name, value):
  77.         if name == None:
  78.             self.wid.HideDialogItem(I_EXC)
  79.             self.wid.HideDialogItem(I_EXC_TITLE)
  80.             value = None
  81.         else:
  82.             self.wid.ShowDialogItem(I_EXC)
  83.             self.wid.ShowDialogItem(I_EXC_TITLE)
  84.             tp, h, rect = self.wid.GetDialogItem(I_EXC)
  85.             Dlg.SetDialogItemText(h, name)
  86.         if value == None:
  87.             self.wid.HideDialogItem(I_EXCVALUE)
  88.             self.wid.HideDialogItem(I_EXCVALUE_TITLE)
  89.         else:
  90.             self.wid.ShowDialogItem(I_EXCVALUE)
  91.             self.wid.ShowDialogItem(I_EXCVALUE_TITLE)
  92.             tp, h, rect = self.wid.GetDialogItem(I_EXCVALUE)
  93.             Dlg.SetDialogItemText(h, value)
  94.         
  95.     def setprogramstate(self, msg):
  96.         tp, h, rect = self.wid.GetDialogItem(I_STATE)
  97.         Dlg.SetDialogItemText(h, msg)
  98.         
  99.     def do_itemhit(self, item, event):
  100.         (what, message, when, where, modifiers) = event
  101.         Qd.SetPort(self.wid)
  102.         where = Qd.GlobalToLocal(where)
  103.                 
  104.         if item == I_STACK:
  105.             new_stackitem, double = self.stack.click(where, 0)
  106.             self.click_stack(new_stackitem)
  107.         elif item == I_VARS:
  108.             new_var, double = self.vars.click(where, 0)
  109.             if double:
  110.                 self.click_var(new_var)
  111.         elif item == I_SOURCE:
  112.             lineno, inborder = self.source.click(where, 0)
  113.             if lineno <> None and lineno >= 0:
  114.                 self.click_source(lineno, inborder)
  115.         elif item == I_BROWSE:
  116.             self.click_browse()
  117.         elif item == I_SHOW_COMPLEX:
  118.             self.show_complex = not self.show_complex
  119.             self.setup_frame()
  120.         elif item == I_SHOW_SYSTEM:
  121.             self.show_system = not self.show_system
  122.             self.setup_frame()
  123.         elif item == I_EDIT:
  124.             self.click_edit()
  125.             
  126.     def set_var_buttons(self):
  127.         tp, h, rect = self.wid.GetDialogItem(I_SHOW_COMPLEX)
  128.         h.as_Control().SetControlValue(self.show_complex)
  129.         tp, h, rect = self.wid.GetDialogItem(I_SHOW_SYSTEM)
  130.         h.as_Control().SetControlValue(self.show_system)
  131.     
  132.     def do_rawupdate(self, window, event):
  133.         Qd.SetPort(self.wid)
  134.         rgn = self.wid.GetWindowPort().visRgn
  135.         tp, h, rect = self.wid.GetDialogItem(I_RULER1)
  136.         Qd.MoveTo(rect[0], rect[1])
  137.         Qd.LineTo(rect[2], rect[1])
  138.         tp, h, rect = self.wid.GetDialogItem(I_RULER2)
  139.         Qd.MoveTo(rect[0], rect[1])
  140.         Qd.LineTo(rect[2], rect[1])
  141.         self.stack.update(rgn)
  142.         self.vars.update(rgn)
  143.         self.source.update(rgn)
  144.  
  145.     def force_redraw(self):
  146.         Qd.SetPort(self.wid)
  147.         Win.InvalRgn(self.wid.GetWindowPort().visRgn)
  148.         
  149.     def do_activate(self, activate, event):
  150.         self.stack.activate(activate)
  151.         self.vars.activate(activate)
  152.         self.source.activate(activate)
  153.                 
  154.     def close(self):
  155.         self.source.close()
  156.         del self.stack
  157.         del self.vars
  158.         del self.source
  159.         self.do_postclose()
  160.